package com.example.mytestdemo.car.media

import android.media.browse.MediaBrowser
import android.media.session.MediaSession
import android.media.session.PlaybackState
import android.os.Bundle
import android.service.media.MediaBrowserService
import android.util.Log

/**
 * @author tgw
 * @date 2022/11/24
 * @describe
 */
const val FOLDERS_ID = "__FOLDERS__"
const val ARTISTS_ID = "__ARTISTS__"
const val ALBUMS_ID = "__ALBUMS__"
const val GENRES_ID = "__GENRES__"
const val ROOT_ID = "__ROOT__"

class MediaService : MediaBrowserService() {

    companion object {
        private const val TAG = "MediaService"
    }

    private lateinit var mediaSession: MediaSession;
    override fun onCreate() {
        super.onCreate()
        mediaSession = MediaSession(this, "TAG")
        mediaSession.setCallback(callback)
        sessionToken = mediaSession.sessionToken


    }

    // 与MediaController.transportControls中的方法是一一对应的。
// 在该方法中实现对 播放器 的控制，
    private val callback = object : MediaSession.Callback() {
        override fun onPlay() {
            super.onPlay()
// 处理 播放器 的播放逻辑。
// 车载应用的话，别忘了处理音频焦点
            Log.e(TAG, "onPlay:")
            if (!mediaSession.isActive) {
                mediaSession.isActive = true
            }
// 更新状态
            val state = PlaybackState.Builder()
                .setState(
                    PlaybackState.STATE_PLAYING, 1, 1f
                )
                .build()
            mediaSession.setPlaybackState(state)
        }

        override fun onPause() {
            super.onPause()
        }

        override fun onStop() {
            super.onStop()
        }
// 还有其它方法需要复写
    }

    override fun onGetRoot(
        clientPackageName: String,
        clientUid: Int,
        rootHints: Bundle?
    ): BrowserRoot? {
// 由MediaBrowser.connect触发，可以通过返回null拒绝客户端的连接。
        return BrowserRoot(ROOT_ID, null)
    }

    override fun onLoadChildren(
        parentId: String,
        result: Result<MutableList<MediaBrowser.MediaItem>>
    ) {
        // 将此消息与当前线程分离，并允许稍后进行sendResult调用
        result.detach()
// 由MediaBrowser.subscribe触发
        when (parentId) {
            ROOT_ID -> {

// 查询本地媒体库
// ...

// 设定到 result 中
                result.sendResult(null)
            }
            FOLDERS_ID -> {
            }
            ALBUMS_ID -> {
            }
            ARTISTS_ID -> {
            }
            GENRES_ID -> {
            }
            else -> {
            }
        }
    }


    override fun onLoadItem(
        itemId: String?, result:
        Result<MediaBrowser.MediaItem>?
    ) {
        super.onLoadItem(itemId, result)
        Log.e(TAG, "onLoadItem: $itemId")
// 根据itemId，返回对用MediaItem
//        result?.detach()
//        result?.sendResult(null)
    }

}